package com.gao.polymorphism;

/**
 * @Author: ShanYuqing
 * @Version: v1.0
 */
public class PolymorphismTest1 {
    /*
            多态的前提： 有继承/实现关系
                        方法重写
                        有父类引用指向子类对象
             1.对象多态
             好处：方法的形参定义为父类类型，这个方法可以接收到该父类的任意子类对象了

             2.行为多态
             好处：同一个方法，具有多种不同表现形式，或形态的能力

             多态的成员访问特点：
                        1.成员变量：编译看左边（父类），运行看左边（父类）
                        2.成员方法：编译看左边（父类），运行看右边（子类）

                            在编译的时候：在检查父类中有没有这个方法
                                        没有：编译出错
                                        有：编译通过，但是运行的时候，一定会执行子类的方法逻辑

                                        原因：担心你调用的方法，在父类中是一个抽象方法
                            ----------------------------------------------------
            多态创建对象：调用静态成员：
                            静态的成员，推荐类名调用
                            细节：静态的成员，可以使用对象名进行调用，但这是一种假象
                                  -生成字节码文件后，会自动将对象名引用，改为类名引用
     */
    public static void main(String[] args) {
        Animal animal = new Dog();
        Animal animal1 = new Cat();
    }
}
abstract class Animal{
    public abstract  void eat();
}
class Dog extends  Animal{

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
class Cat extends  Animal{

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}